package a_direct;

import com.rabbitmq.client.*;
import org.junit.Test;
import utils.RabbitMQUtils;

import java.io.IOException;

/**
 * 消息的消费者
 */
public class Consumer {

    @Test
    public void receiveMessage() throws Exception {
        //获取连接
        Connection connection = RabbitMQUtils.getConnection();
        //创建一个通道
        Channel channel = connection.createChannel();
        /**
         * 绑定队列
         * 参数1:队列名，如果发送消息时，队列在mq里面不存在，它会创建一个新的队列
         * 参数2:是否持久化如果为False,当MQ重启时，消息会丢失
         * 参数3:是否独享，true代表只有当前的connection可以访问到这个队列
         * 参数4:是否自动删除,是否用完之后就删这个队列
         * 参数5:其它参数
         */
        channel.queueDeclare("hello",true,false,false,null);

        /**
         * 接收消息
         * 参数 1：队列名
         * 参数 2：是否自动签收
         * 参数 3：回调接口
         *
         */
        channel.basicConsume("hello",true,new DefaultConsumer(channel){
            /**
             * @param consumerTag
             * @param envelope
             * @param properties
             * @param body 消息体
             * @throws IOException
             */
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties
                    properties, byte[] body) throws IOException {
                    System.out.println("消费者收到消息："+new String(body));
                }
            });
            //不能让程序结束
            System.in.read();
            //关闭通道和连接
            RabbitMQUtils.closeChannelAndConnection(channel,connection);
        }

}
